Micron Document
🌎 rns.kin.earth git 🌍

Node / dev / reticulum / files / RNS / Identity.py

Displaying Raw • Download

RNS/Identity.py 4ffe4482d378bb75096e65fdbdbb4e3fe7e2b0e4 (4ffe4482) Text, 9.69 KB

Tff7b72import T7ee787base64
Tff7b72import T7ee787math
Tff7b72import T7ee787os
Tff7b72import T7ee787RNS
Tff7b72import T7ee787time
Tff7b72import T7ee787atexit
Tff7b72from T7ee787.T7ee787vendor Tff7b72import Te6edf3umsgpack Tff7b72as Te6edf3umsgpack
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitives Tff7b72import Te6edf3hashes
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787backends Tff7b72import Te6edf3default_backend
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitives Tff7b72import Te6edf3serialization
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitivesT7ee787.T7ee787serialization Tff7b72import Te6edf3load_der_public_key
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitivesT7ee787.T7ee787serialization Tff7b72import Te6edf3load_der_private_key
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitivesT7ee787.T7ee787asymmetric Tff7b72import Te6edf3rsa
Tff7b72from T7ee787cryptographyT7ee787.T7ee787hazmatT7ee787.T7ee787primitivesT7ee787.T7ee787asymmetric Tff7b72import Te6edf3padding

Tff7b72class T56d364IdentityTb4b4b4:
T8b949e#KEYSIZE = 1536
Te6edf3KEYSIZE Tff7b72= T79c0ff1024
Te6edf3DERKEYSIZE Tff7b72= Te6edf3KEYSIZETff7b72+T79c0ff272

T8b949e# Non-configurable constants
Te6edf3PADDINGSIZE Tff7b72= T79c0ff336 T8b949e# In bits
Te6edf3HASHLENGTH Tff7b72= T79c0ff256 T8b949e# In bits
Te6edf3SIGLENGTH Tff7b72= Te6edf3KEYSIZE

Te6edf3ENCRYPT_CHUNKSIZE Tff7b72= Tb4b4b4(Te6edf3KEYSIZETff7b72-Te6edf3PADDINGSIZETb4b4b4)Tff7b72/Tff7b72/T79c0ff8
Te6edf3DECRYPT_CHUNKSIZE Tff7b72= Te6edf3KEYSIZETff7b72/Tff7b72/T79c0ff8

Te6edf3TRUNCATED_HASHLENGTH Tff7b72= T79c0ff80 T8b949e# In bits

T8b949e# Storage
Te6edf3known_destinations Tff7b72= Tb4b4b4{Tb4b4b4}

Tf0883e@staticmethod
Tff7b72def Td2a8ffrememberTb4b4b4(Te6edf3packet_hashTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3public_keyTb4b4b4, Te6edf3app_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3IdentityTff7b72.Td2a8ffknown_destinationsTb4b4b4[Te6edf3destination_hashTb4b4b4] Tff7b72= Tb4b4b4[Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3packet_hashTb4b4b4, Te6edf3public_keyTb4b4b4, Te6edf3app_dataTb4b4b4]


Tf0883e@staticmethod
Tff7b72def Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSearching for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72if Te6edf3destination_hash Tff7b72in Te6edf3IdentityTff7b72.Td2a8ffknown_destinationsTb4b4b4:
Te6edf3identity_data Tff7b72= Te6edf3IdentityTff7b72.Td2a8ffknown_destinationsTb4b4b4[Te6edf3destination_hashTb4b4b4]
Te6edf3identity Tff7b72= Te6edf3IdentityTb4b4b4(Te6edf3public_onlyTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3identityTff7b72.Td2a8ffloadPublicKeyTb4b4b4(Te6edf3identity_dataTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffFound Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in known destinationsTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72return Te6edf3identity
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not find Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in known destinationsTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72return Tff7b72None

Tf0883e@staticmethod
Tff7b72def Td2a8ffsaveKnownDestinationsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSaving known destinations to storage...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffstoragepathTff7b72+Ta5d6ff"Ta5d6ff/known_destinationsTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3umsgpackTff7b72.Td2a8ffdumpTb4b4b4(Te6edf3IdentityTff7b72.Td2a8ffknown_destinationsTb4b4b4, Te6edf3fileTb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDone saving known destinations to storageTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)

Tf0883e@staticmethod
Tff7b72def Td2a8ffloadKnownDestinationsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffstoragepathTff7b72+Ta5d6ff"Ta5d6ff/known_destinationsTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffstoragepathTff7b72+Ta5d6ff"Ta5d6ff/known_destinationsTa5d6ff"Tb4b4b4,Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3IdentityTff7b72.Td2a8ffknown_destinations Tff7b72= Te6edf3umsgpackTff7b72.Td2a8ffloadTb4b4b4(Te6edf3fileTb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLoaded Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tffa657lenTb4b4b4(Te6edf3IdentityTff7b72.Td2a8ffknown_destinationsTb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff known destination from storageTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Tff7b72exceptTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError loading known destinations from disk, file will be recreated on exitTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDestinations file does not exist, so no known destinations loadedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)

Tf0883e@staticmethod
Tff7b72def Td2a8fffullHashTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3digest Tff7b72= Te6edf3hashesTff7b72.Td2a8ffHashTb4b4b4(Te6edf3hashesTff7b72.Td2a8ffSHA256Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3backendTff7b72=Te6edf3default_backendTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3digestTff7b72.Td2a8ffupdateTb4b4b4(Te6edf3dataTb4b4b4)

Tff7b72return Te6edf3digestTff7b72.Td2a8fffinalizeTb4b4b4(Tb4b4b4)

Tf0883e@staticmethod
Tff7b72def Td2a8fftruncatedHashTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4:
Te6edf3digest Tff7b72= Te6edf3hashesTff7b72.Td2a8ffHashTb4b4b4(Te6edf3hashesTff7b72.Td2a8ffSHA256Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3backendTff7b72=Te6edf3default_backendTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3digestTff7b72.Td2a8ffupdateTb4b4b4(Te6edf3dataTb4b4b4)

Tff7b72return Te6edf3digestTff7b72.Td2a8fffinalizeTb4b4b4(Tb4b4b4)Tb4b4b4[Tb4b4b4:Tb4b4b4(Te6edf3IdentityTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tb4b4b4]

Tf0883e@staticmethod
Tff7b72def Td2a8ffgetRandomHashTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3IdentityTff7b72.Td2a8fftruncatedHashTb4b4b4(Te6edf3osTff7b72.Td2a8ffurandomTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4)

Tf0883e@staticmethod
Tff7b72def Td2a8ffvalidateAnnounceTb4b4b4(Te6edf3packetTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3packetTff7b72.Td2a8ffpacket_type Tff7b72== Te6edf3RNSTff7b72.Td2a8ffPacketTff7b72.Td2a8ffANNOUNCETb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffValidating announce from Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3packetTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3destination_hash Tff7b72= Te6edf3packetTff7b72.Td2a8ffdestination_hash
Te6edf3public_key Tff7b72= Te6edf3packetTff7b72.Td2a8ffdataTb4b4b4[T79c0ff10Tb4b4b4:Te6edf3IdentityTff7b72.Td2a8ffDERKEYSIZETff7b72/Tff7b72/T79c0ff8Tff7b72+T79c0ff10Tb4b4b4]
Te6edf3random_hash Tff7b72= Te6edf3packetTff7b72.Td2a8ffdataTb4b4b4[Te6edf3IdentityTff7b72.Td2a8ffDERKEYSIZETff7b72/Tff7b72/T79c0ff8Tff7b72+T79c0ff10Tb4b4b4:Te6edf3IdentityTff7b72.Td2a8ffDERKEYSIZETff7b72/Tff7b72/T79c0ff8Tff7b72+T79c0ff20Tb4b4b4]
Te6edf3signature Tff7b72= Te6edf3packetTff7b72.Td2a8ffdataTb4b4b4[Te6edf3IdentityTff7b72.Td2a8ffDERKEYSIZETff7b72/Tff7b72/T79c0ff8Tff7b72+T79c0ff20Tb4b4b4:Te6edf3IdentityTff7b72.Td2a8ffDERKEYSIZETff7b72/Tff7b72/T79c0ff8Tff7b72+T79c0ff20Tff7b72+Te6edf3IdentityTff7b72.Td2a8ffKEYSIZETff7b72/Tff7b72/T79c0ff8Tb4b4b4]
Te6edf3app_data Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"
Tff7b72if Tffa657lenTb4b4b4(Te6edf3packetTff7b72.Td2a8ffdataTb4b4b4) Tff7b72> Te6edf3IdentityTff7b72.Td2a8ffDERKEYSIZETff7b72/Tff7b72/T79c0ff8Tff7b72+T79c0ff20Tff7b72+Te6edf3IdentityTff7b72.Td2a8ffKEYSIZETff7b72/Tff7b72/T79c0ff8Tb4b4b4:
Te6edf3app_data Tff7b72= Te6edf3packetTff7b72.Td2a8ffdataTb4b4b4[Te6edf3IdentityTff7b72.Td2a8ffDERKEYSIZETff7b72/Tff7b72/T79c0ff8Tff7b72+T79c0ff20Tff7b72+Te6edf3IdentityTff7b72.Td2a8ffKEYSIZETff7b72/Tff7b72/T79c0ff8Tb4b4b4:Tb4b4b4]

Te6edf3signed_data Tff7b72= Te6edf3destination_hashTff7b72+Te6edf3public_keyTff7b72+Te6edf3random_hashTff7b72+Te6edf3app_data

Te6edf3announced_identity Tff7b72= Te6edf3IdentityTb4b4b4(Te6edf3public_onlyTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3announced_identityTff7b72.Td2a8ffloadPublicKeyTb4b4b4(Te6edf3public_keyTb4b4b4)

Tff7b72if Te6edf3announced_identityTff7b72.Td2a8ffpub Tff7b72!= Tff7b72None Tff7b72and Te6edf3announced_identityTff7b72.Td2a8ffvalidateTb4b4b4(Te6edf3signatureTb4b4b4, Te6edf3signed_dataTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrememberTb4b4b4(Te6edf3packetTff7b72.Td2a8ffgetHashTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3public_keyTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStored valid announce from Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72del Te6edf3announced_identity
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived invalid announceTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72del Te6edf3announced_identity
Tff7b72return Tff7b72False

Tf0883e@staticmethod
Tff7b72def Td2a8ffexitHandlerTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3IdentityTff7b72.Td2a8ffsaveKnownDestinationsTb4b4b4(Tb4b4b4)


Tf0883e@staticmethod
Tff7b72def Td2a8fffrom_fileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Te6edf3identity Tff7b72= Te6edf3IdentityTb4b4b4(Te6edf3public_onlyTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3identityTff7b72.Td2a8ffloadTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3identity
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72None


Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4,Te6edf3public_onlyTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
T8b949e# Initialize keys to none
Tff7b72selfTff7b72.Td2a8ffprv Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpub Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprv_bytes Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpub_bytes Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffhash Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffhexhash Tff7b72= Tff7b72None

Tff7b72if Tff7b72not Te6edf3public_onlyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcreateKeysTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffcreateKeysTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffprv Tff7b72= Te6edf3rsaTff7b72.Td2a8ffgenerate_private_keyTb4b4b4(
Te6edf3public_exponentTff7b72=T79c0ff65337Tb4b4b4,
Te6edf3key_sizeTff7b72=Te6edf3IdentityTff7b72.Td2a8ffKEYSIZETb4b4b4,
Te6edf3backendTff7b72=Te6edf3default_backendTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffprv_bytes Tff7b72= Tff7b72selfTff7b72.Td2a8ffprvTff7b72.Td2a8ffprivate_bytesTb4b4b4(
Te6edf3encodingTff7b72=Te6edf3serializationTff7b72.Td2a8ffEncodingTff7b72.Td2a8ffDERTb4b4b4,
Tffa657formatTff7b72=Te6edf3serializationTff7b72.Td2a8ffPrivateFormatTff7b72.Td2a8ffPKCS8Tb4b4b4,
Te6edf3encryption_algorithmTff7b72=Te6edf3serializationTff7b72.Td2a8ffNoEncryptionTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpub Tff7b72= Tff7b72selfTff7b72.Td2a8ffprvTff7b72.Td2a8ffpublic_keyTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpub_bytes Tff7b72= Tff7b72selfTff7b72.Td2a8ffpubTff7b72.Td2a8ffpublic_bytesTb4b4b4(
Te6edf3encodingTff7b72=Te6edf3serializationTff7b72.Td2a8ffEncodingTff7b72.Td2a8ffDERTb4b4b4,
Tffa657formatTff7b72=Te6edf3serializationTff7b72.Td2a8ffPublicFormatTff7b72.Td2a8ffSubjectPublicKeyInfo
Tb4b4b4)

Tff7b72selfTff7b72.Td2a8ffupdateHashesTb4b4b4(Tb4b4b4)

Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffIdentity keys created for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhashTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)

Tff7b72def Td2a8ffgetPrivateKeyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffprv_bytes

Tff7b72def Td2a8ffgetPublicKeyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffpub_bytes

Tff7b72def Td2a8ffloadPrivateKeyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3prv_bytesTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffprv_bytes Tff7b72= Te6edf3prv_bytes
Tff7b72selfTff7b72.Td2a8ffprv Tff7b72= Te6edf3serializationTff7b72.Td2a8ffload_der_private_keyTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffprv_bytesTb4b4b4,
Te6edf3passwordTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3backendTff7b72=Te6edf3default_backendTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpub Tff7b72= Tff7b72selfTff7b72.Td2a8ffprvTff7b72.Td2a8ffpublic_keyTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpub_bytes Tff7b72= Tff7b72selfTff7b72.Td2a8ffpubTff7b72.Td2a8ffpublic_bytesTb4b4b4(
Te6edf3encodingTff7b72=Te6edf3serializationTff7b72.Td2a8ffEncodingTff7b72.Td2a8ffDERTb4b4b4,
Tffa657formatTff7b72=Te6edf3serializationTff7b72.Td2a8ffPublicFormatTff7b72.Td2a8ffSubjectPublicKeyInfo
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdateHashesTb4b4b4(Tb4b4b4)

Tff7b72return Tff7b72True

Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffFailed to load identity keyTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72False

Tff7b72def Td2a8ffloadPublicKeyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpub_bytes Tff7b72= Te6edf3key
Tff7b72selfTff7b72.Td2a8ffpub Tff7b72= Te6edf3load_der_public_keyTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpub_bytesTb4b4b4, Te6edf3backendTff7b72=Te6edf3default_backendTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdateHashesTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while loading public key, the contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)

Tff7b72def Td2a8ffupdateHashesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhash Tff7b72= Te6edf3IdentityTff7b72.Td2a8fftruncatedHashTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpub_bytesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhexhash Tff7b72= Tff7b72selfTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)

Tff7b72def Td2a8ffsaveTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3key_fileTb4b4b4:
Te6edf3key_fileTff7b72.Td2a8ffwriteTb4b4b4(Tff7b72selfTff7b72.Td2a8ffprv_bytesTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while saving identity to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffloadTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3key_fileTb4b4b4:
Te6edf3prv_bytes Tff7b72= Te6edf3key_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffloadPrivateKeyTb4b4b4(Te6edf3prv_bytesTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while loading identity from Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)

Tff7b72def Td2a8ffencryptTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plaintextTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpub Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3chunksize Tff7b72= Te6edf3IdentityTff7b72.Td2a8ffENCRYPT_CHUNKSIZE
Te6edf3chunks Tff7b72= Tffa657intTb4b4b4(Te6edf3mathTff7b72.Td2a8ffceilTb4b4b4(Tffa657lenTb4b4b4(Te6edf3plaintextTb4b4b4)Tff7b72/Tb4b4b4(Tffa657floatTb4b4b4(Te6edf3chunksizeTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)

Te6edf3ciphertext Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"Tb4b4b4;
Tff7b72for Te6edf3chunk Tff7b72in Tffa657rangeTb4b4b4(Te6edf3chunksTb4b4b4)Tb4b4b4:
Te6edf3start Tff7b72= Te6edf3chunkTff7b72*Te6edf3chunksize
Te6edf3end Tff7b72= Tb4b4b4(Te6edf3chunkTff7b72+T79c0ff1Tb4b4b4)Tff7b72*Te6edf3chunksize
Tff7b72if Tb4b4b4(Te6edf3chunkTff7b72+T79c0ff1Tb4b4b4)Tff7b72*Te6edf3chunksize Tff7b72> Tffa657lenTb4b4b4(Te6edf3plaintextTb4b4b4)Tb4b4b4:
Te6edf3end Tff7b72= Tffa657lenTb4b4b4(Te6edf3plaintextTb4b4b4)
Te6edf3ciphertext Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffpubTff7b72.Td2a8ffencryptTb4b4b4(
Te6edf3plaintextTb4b4b4[Te6edf3startTb4b4b4:Te6edf3endTb4b4b4]Tb4b4b4,
Te6edf3paddingTff7b72.Td2a8ffOAEPTb4b4b4(
Te6edf3mgfTff7b72=Te6edf3paddingTff7b72.Td2a8ffMGF1Tb4b4b4(Te6edf3algorithmTff7b72=Te6edf3hashesTff7b72.Td2a8ffSHA1Tb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3algorithmTff7b72=Te6edf3hashesTff7b72.Td2a8ffSHA1Tb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3labelTff7b72=Tff7b72None
Tb4b4b4)
Tb4b4b4)
Tff7b72return Te6edf3ciphertext
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149KeyErrorTb4b4b4(Ta5d6ff"Ta5d6ffEncryption failed because identity does not hold a public keyTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8ffdecryptTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3ciphertextTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffprv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3plaintext Tff7b72= Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3chunksize Tff7b72= Te6edf3IdentityTff7b72.Td2a8ffDECRYPT_CHUNKSIZE
Te6edf3chunks Tff7b72= Tffa657intTb4b4b4(Te6edf3mathTff7b72.Td2a8ffceilTb4b4b4(Tffa657lenTb4b4b4(Te6edf3ciphertextTb4b4b4)Tff7b72/Tb4b4b4(Tffa657floatTb4b4b4(Te6edf3chunksizeTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4)

Te6edf3plaintext Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ff"Tb4b4b4;
Tff7b72for Te6edf3chunk Tff7b72in Tffa657rangeTb4b4b4(Te6edf3chunksTb4b4b4)Tb4b4b4:
Te6edf3start Tff7b72= Te6edf3chunkTff7b72*Te6edf3chunksize
Te6edf3end Tff7b72= Tb4b4b4(Te6edf3chunkTff7b72+T79c0ff1Tb4b4b4)Tff7b72*Te6edf3chunksize
Tff7b72if Tb4b4b4(Te6edf3chunkTff7b72+T79c0ff1Tb4b4b4)Tff7b72*Te6edf3chunksize Tff7b72> Tffa657lenTb4b4b4(Te6edf3ciphertextTb4b4b4)Tb4b4b4:
Te6edf3end Tff7b72= Tffa657lenTb4b4b4(Te6edf3ciphertextTb4b4b4)

Te6edf3plaintext Tff7b72+Tff7b72= Tff7b72selfTff7b72.Td2a8ffprvTff7b72.Td2a8ffdecryptTb4b4b4(
Te6edf3ciphertextTb4b4b4[Te6edf3startTb4b4b4:Te6edf3endTb4b4b4]Tb4b4b4,
Te6edf3paddingTff7b72.Td2a8ffOAEPTb4b4b4(
Te6edf3mgfTff7b72=Te6edf3paddingTff7b72.Td2a8ffMGF1Tb4b4b4(Te6edf3algorithmTff7b72=Te6edf3hashesTff7b72.Td2a8ffSHA1Tb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3algorithmTff7b72=Te6edf3hashesTff7b72.Td2a8ffSHA1Tb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3labelTff7b72=Tff7b72None
Tb4b4b4)
Tb4b4b4)
Tff7b72exceptTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDecryption by Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Tff7b72return Te6edf3plaintextTb4b4b4;
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149KeyErrorTb4b4b4(Ta5d6ff"Ta5d6ffDecryption failed because identity does not hold a private keyTa5d6ff"Tb4b4b4)


Tff7b72def Td2a8ffsignTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffprv Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3signature Tff7b72= Tff7b72selfTff7b72.Td2a8ffprvTff7b72.Td2a8ffsignTb4b4b4(
Te6edf3messageTb4b4b4,
Te6edf3paddingTff7b72.Td2a8ffPSSTb4b4b4(
Te6edf3mgfTff7b72=Te6edf3paddingTff7b72.Td2a8ffMGF1Tb4b4b4(Te6edf3hashesTff7b72.Td2a8ffSHA256Tb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3salt_lengthTff7b72=Te6edf3paddingTff7b72.Td2a8ffPSSTff7b72.Td2a8ffMAX_LENGTH
Tb4b4b4)Tb4b4b4,
Te6edf3hashesTff7b72.Td2a8ffSHA256Tb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72return Te6edf3signature
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149KeyErrorTb4b4b4(Ta5d6ff"Ta5d6ffSigning failed because identity does not hold a private keyTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffvalidateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3signatureTb4b4b4, Te6edf3messageTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpub Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpubTff7b72.Td2a8ffverifyTb4b4b4(
Te6edf3signatureTb4b4b4,
Te6edf3messageTb4b4b4,
Te6edf3paddingTff7b72.Td2a8ffPSSTb4b4b4(
Te6edf3mgfTff7b72=Te6edf3paddingTff7b72.Td2a8ffMGF1Tb4b4b4(Te6edf3hashesTff7b72.Td2a8ffSHA256Tb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3salt_lengthTff7b72=Te6edf3paddingTff7b72.Td2a8ffPSSTff7b72.Td2a8ffMAX_LENGTH
Tb4b4b4)Tb4b4b4,
Te6edf3hashesTff7b72.Td2a8ffSHA256Tb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149KeyErrorTb4b4b4(Ta5d6ff"Ta5d6ffSignature validation failed because identity does not hold a public keyTa5d6ff"Tb4b4b4)

Tff7b72def Td2a8ffproveTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packetTb4b4b4, Te6edf3destinationTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3signature Tff7b72= Tff7b72selfTff7b72.Td2a8ffsignTb4b4b4(Te6edf3packetTff7b72.Td2a8ffpacket_hashTb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffshould_use_implicit_proofTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3proof_data Tff7b72= Te6edf3signature
Tff7b72elseTb4b4b4:
Te6edf3proof_data Tff7b72= Te6edf3packetTff7b72.Td2a8ffpacket_hash Tff7b72+ Te6edf3signature
Tff7b72if Te6edf3destination Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3destination Tff7b72= Te6edf3packetTff7b72.Td2a8ffgenerateProofDestinationTb4b4b4(Tb4b4b4)

Te6edf3proof Tff7b72= Te6edf3RNSTff7b72.Td2a8ffPacketTb4b4b4(Te6edf3destinationTb4b4b4, Te6edf3proof_dataTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffPacketTff7b72.Td2a8ffPROOFTb4b4b4, Te6edf3attached_interface Tff7b72= Te6edf3packetTff7b72.Td2a8ffreceiving_interfaceTb4b4b4)
Te6edf3proofTff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4)

Tff7b72def Tff7b72__str__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhashTb4b4b4)

Served by rngit 1.5.2 - Generated in 0.12s